//后端加密，后端在根据加密的密文+盐值来进行加密存储
const CryptoJS = require("crypto-js")
const guid = require("./guid")

/**
 * 这是前端的加密的方式，在后端测试添加用户的时候可以调用
 * @param pass
 * @returns {*}
 */
function cryptoWithoutSalt(pass) {
  if(!pass){
    throw new Error("输入不能为空！");
  }
  console.log(CryptoJS.enc)
  return CryptoJS.enc.Base64.stringify(CryptoJS.SHA256(pass));
}

/**
 * 这是后端的加密方式，string方式换了一下，并且加了盐值
 * @param pass
 * @param salt
 * @returns {*[]}
 */
function crypto(pass,salt) {
  if(!pass){
      throw new Error("输入不能为空！");
  }
  if(!salt){
      salt = guid.uuid(8)
  }

  return [CryptoJS.SHA256(pass+salt).toString(CryptoJS.enc.Hex),salt];
}

/**
 * 验证密码
 * @param pass
 * @param dbpass
 * @returns {boolean}
 */
function verify(pass,dbpass) {
  if(!pass){
    return false;
  }
  if(!dbpass){
    return false;
  }

  return pass === dbpass;
}

module.exports = {
  crypto,
  verify,
  cryptoWithoutSalt,
}